﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FTools.Dominio;
using FTools.Persistencia;
using System.Data.SqlClient;
using System.Collections;
using FTools.Interface;
using FTools.Generico;

namespace FTools.Comunicacion
{
    class ComDepartamento : InterfaceDepartamento
    {
        Conexion objConexion = new Conexion();
        SqlConnection conexion;
        SqlTransaction transaccion = null;
        PerDepartamento objPerDepartamento = new PerDepartamento();

        public Departamento obtenerDepartamento(long xIdDepartamento)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Departamento objDepartamento = objPerDepartamento.obtenerDepartamento(conexion, transaccion, xIdDepartamento);
                transaccion.Commit();
                return objDepartamento;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public Boolean existeDepartamento(long xIdDepartamento)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Boolean existe = objPerDepartamento.existeDepartamento(conexion, transaccion, xIdDepartamento);
                transaccion.Commit();
                return existe;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public Boolean existeDepartamento(String xNombre, long xIdPais)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Boolean existe = objPerDepartamento.existeDepartamento(conexion, transaccion, xNombre, xIdPais);
                transaccion.Commit();
                return existe;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public ArrayList obtenerColeccionDepartamento(long xIdPais)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                ArrayList colDepartamento = objPerDepartamento.obtenerColeccionDepartamento(conexion, transaccion, xIdPais);
                transaccion.Commit();
                return colDepartamento;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public int altaDepartamento(Departamento xObjDepartamento)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                xObjDepartamento.IdDepartamento = FuncionesGenericas.generarNumerador("DEPARTAMENTO");
                int nro = objPerDepartamento.altaDepartamento(conexion, transaccion, xObjDepartamento);
                transaccion.Commit();
                return nro;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public int bajaDepartamento(Departamento xObjDepartamento)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                int nro = objPerDepartamento.bajaDepartamento(conexion, transaccion, xObjDepartamento);
                transaccion.Commit();
                return nro;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public int modificaDepartamento(Departamento xObjDepartamento)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                int nro = objPerDepartamento.modificaDepartamento(conexion, transaccion, xObjDepartamento);
                transaccion.Commit();
                return nro;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }
    }
}
